package ar.edu.utn.frsf.tpae.a2014.g02.service;

import java.util.List;

import ar.edu.utn.frsf.tpae.a2014.g02.persistence.dao.UsuarioDao;
import ar.edu.utn.frsf.tpae.a2014.g02.persistence.model.Usuario;
import ar.edu.utn.frsf.tpae.a2014.g02.service.exceptions.UserLoginException;

/**
 * Interfaz que define las operaciones que debe proveer un servicio de Usuarios.
 * 
 * @author Ramonda-Lazzarini
 */
public interface UsuarioService {

	/**
	 * Crea una lista de Usuarios.
	 * 
	 * @param Usuario
	 *            Los Usuarios a crear.
	 */
	void crear(List<Usuario> pedidos);

	/**
	 * Valida la existencia del usuario retornando una instancia en caso de que
	 * exista y sean correctos los datos.
	 * 
	 * @param usuario
	 *            El nombre de usuario
	 * @param password
	 *            La contrasenia.
	 * @return El {@link Usuario}
	 * @throws UserLoginException
	 *             Excepcion al ingresar a la aplicacion.
	 */
	Usuario validarLoginUsuario(String usuario, String password)
			throws UserLoginException;

	/**
	 * Recupera los usuarios segun el Tipo generico
	 * 
	 * @param <T>
	 *            Parametro generico
	 * @param userType
	 *            Tipo de usuario.
	 * @return La lista de {@link Usuario}, segun el parametro pasado.
	 */
	<T extends Usuario> List<T> getAll(Class<T> userType);

	/**
	 * Recupera el {@link Usuario} segun el ID
	 * 
	 * @param idUsuario
	 *            ID del {@link Usuario}
	 * @return {@link Usuario}
	 */
	Usuario getUsuarioByID(Integer idUsuario);

	/**
	 * Llama a {@link UsuarioDao#deleteAll()} para eliminar los {@link Usuario}.
	 * SOLO INSTANCIA DE DESARROLLO! BORRAR EN PROD.
	 */
	void limpiar();

}